Flutter StatefulWidget

StatefulWidget 是 Flutter 中的一种特殊组件,它可以在运行时保持可变状态。了解其生命周期是优化应用性能和正确管理状态的关键。

生命周期

状态机如下:

StatefulWidget 生命周期

构造函数

StatefulWidget 的 constructor: 构造函数首先被调用,用于初始化 StatefulWidget 的关键参数。

createState

StatefulWidget 的 createState(): 当框架需要构建 StatefulWidget 时,该方法会被调用。它返回一个新的 State 对象,这个对象会在组件的整个生命周期中持续存在。

State 生命周期

initState

initState(): 当 State 对象被创建后,这个方法会立即被调用。通常用于执行一次性的初始化操作。

didChangeDependencies

当 State 的依赖变化时被调用。

举例:运行的 build() 方法中包含一个 InheritedWidget,会将 State 与这个 InheritedWidget 建立依赖关系,后续当 InheritedWidget 变化时,会调用 didChangeDependencies 作为通知回调。

另外,在 initState() 后和首次 build() 之前调用,也会被调用。

构建和更新

build

build(): 返回一个新的组件树。当设置状态 (setState()) 被调用或其他可能导致 UI 更新的操作发生时,该方法会被重新调用。

reassemble

在 Debug 模式下,每次 Hot reload 都会调用这个方法。

didUpdateWidget

当组件的参数发生变化时被调用的方法.

所谓参数发生变化,具体指以下触发场景:

  1. 父组件重建场景:当父组件重建时,可能会创建一个当前 StatefulWidget 类的新实例。但是,尽管外部的 StatefulWidget 实例是新的,但内部关联的 State 对象却不会被重新创建。Flutter 框架设计如此是为了保持组件的状态持续性。因此,当新的 StatefulWidget 实例与已存在的 State 对象关联时,didUpdateWidget 方法会被调用,以便你可以对新旧参数进行比较并进行必要的状态调整。

  2. 参数变化:当 StatefulWidget 的父组件为其传递新的参数时,didUpdateWidget 会被调用。在这个方法内,您可以对旧的 StatefulWidget 实例 (oldWidget) 和当前的 StatefulWidget 实例进行比较,以确定哪些参数发生了变化。

应用:简单的状态管理

可以基于 didUpdateWidget 实现简单的状态管理,父组件状态通过组件参数方式传入,当父组件状态变化时,触发参数变化场景,子组件在 didUpdateWidget 回调中实现对子组件内部状态的同步。

State 的移除和销毁

deactivate

当 State 对象从树中被移除时,该方法会被调用。

注意,deactivate 不代表组件销毁,该 Widget 还有可能被重新挂载到树上。

dispose

表示对象永久从组件树中移除,需要进行执行清理操作,如取消监听器或定时器。


本文作者:Maeiee

本文链接:Flutter StatefulWidget

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!